#include <iostream>
#include <stdlib.h>
#include <string>

#include "Parser.h"

#define NOMBRE_LAZO_CACHE "lazo_tamanio_cache"

int calcularTamanioCache(Parser* parser, int tamanioBloque, std::string d1) {
  unsigned int tamanioCache, cantidadBloques= 1;
  unsigned int rate= 0; 
  do {
    tamanioCache= cantidadBloques * tamanioBloque;
    std::string parametros= intToString(tamanioBloque) + " " + intToString(tamanioCache);
    if(llamadaValgrind(NOMBRE_LAZO_CACHE, parametros, d1) != -1) {
      parser->parsear(SALIDA_CGANNOTATE, NOMBRE_LAZO_CACHE);   
      rate= round(((double)parser->get_d1mw()/(double)parser->get_dw()));
    } else {
      tamanioCache= -1;
      break;    
    }
    cantidadBloques*= 2;
  } while(rate < 1);
  
  return((cantidadBloques/4) * tamanioBloque);
}
